package com.alks.function.mapper.stockdept.pcfactorystockquery;

import com.alks.entity.data.entity.PcCuttingCollectDetail;
import com.alks.function.data.vo.controller.stockdept.DeptProcNumVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author ms
 * @since 2024-06-28
 */
public interface PcCuttingCollectDetailMapper extends BaseMapper<PcCuttingCollectDetail> {

    /**
     * 根据标签删除
     *
     * @param labelNo       标签
     * @param processCode   工序
     * @param companyId 公司ID
     * @param lsCollectType 收发类型
     */
    void deleteByLabel(@Param("labelNo") String labelNo, @Param("processCode") String processCode, @Param("companyId") String companyId, @Param("lsCollectType") String lsCollectType);

    /**
     * 查询当日对应工艺收料指令数和袋数
     * @param companyId 公司ID
     * @param dateInfo 日期
     * @param processCode 工序
     * @return 收料指令数和袋数
     */
    Map<String, Integer> selectCollectLotNum(@Param("companyId") String companyId, @Param("dateInfo") LocalDateTime dateInfo, @Param("processCode") String processCode);

    /**
     * 查询当日对应工艺收料部件数
     * @param companyId 公司ID
     * @param dateInfo 日期
     * @param processCode 工序
     * @return 收料部件数
     */
    Integer countCollectPartNum(@Param("companyId") String companyId, @Param("dateInfo") LocalDateTime dateInfo, @Param("processCode") String processCode);

    /**
     * 查询对印工艺当日发料指令数和袋数
     * @param companyId 公司ID
     * @param dateInfo 日期
     * @param processCode 工序
     * @return 送料指令数和袋数
     */
    Map<String, Integer> selectCollectOutLotNum(@Param("companyId") String companyId, @Param("dateInfo") LocalDateTime dateInfo, @Param("processCode") String processCode);

    /**
     * 查询对印工艺当日发料部件数
     * @param companyId 公司ID
     * @param dateInfo 日期
     * @param processCode 工序
     * @return 当日发料部件数
     */
    Integer countCollectOutPartNum(@Param("companyId") String companyId, @Param("dateInfo") LocalDateTime dateInfo, @Param("processCode") String processCode);

    /**
     * 查询对印工艺当日收料配套数
     * @param companyId 公司ID
     * @param dateInfo 日期
     * @param processCode 工序
     * @return 当日收料配套数
     */
    Integer countMatchNum(@Param("companyId") String companyId, @Param("dateInfo") LocalDateTime dateInfo, @Param("processCode") String processCode);

    /**
     * 查询对印工艺当日发料配套数
     * @param companyId 公司ID
     * @param dateInfo 日期
     * @param processCode 工序
     * @return 当日发料配套数
     */
    Integer countOutMatchNum(@Param("companyId") String companyId, @Param("dateInfo") LocalDateTime dateInfo, @Param("processCode") String processCode);

    int addPcCuttingCollectDetailBk(@Param("lotNo") String lotNo, @Param("userName") String userName, @Param("version") int version);

    /**
     * 根据日期查询部门生产数量
     *
     * @param start     开始日期
     * @param end       结束日期
     * @param companyId 部门ID
     * @return 部门生产数量
     */
    List<DeptProcNumVo> getProdNumByDate(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("companyId") String companyId);

}
